<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        table {
            width: 400px;
            border: 1px solid #000;
            border-collapse: collapse;
            margin: 0 auto;
        }
        
        td,
        th {
            border: 1px solid #000;
            text-align: center;
        }
        
        input {
            width: 50px;
        }
        
        .search {
            width: 600px;
            margin: 20px auto;
        }
    </style>
</head>

<body>
    <div class="search">
        按照价格查询: <input type="text" class="start"> - <input type="text" class="end"> <button class="search-price">搜索</button> 按照商品名称查询: <input type="text" class="product"> <button class="search-pro">查询</button>
    </div>
    <table>
        <thead>
            <tr>
                <th>id</th>
                <th>产品名称</th>
                <th>价格</th>
            </tr>
        </thead>
        <tbody>


        </tbody>
    </table>
    <script>
        // 利用新增数组方法操作数据
        var data = [{
            id: 1,
            pname: '小米',
            price: 3999
        }, {
            id: 2,
            pname: 'oppo',
            price: 999
        }, {
            id: 3,
            pname: '荣耀',
            price: 1299
        }, {
            id: 4,
            pname: '华为',
            price: 1999
        }, ];
        // 1.用js把数组元素渲染到页面中tbody中
        var tbody = document.querySelector('tbody');
        load(data); // 用forEach()遍历数组,直接调用渲染页面函数
        // 渲染页面函数
        function load(datas) {
            if (datas == '') {
                tbody.innerHTML = '<tr>抱歉，没有符合的元素</tr>';
                return flase;
            };
            tbody.innerHTML = ''; //我连浩伟真是个人才，嘻嘻，感谢pink老师!!
            datas.forEach(function(value, index, array) { //参数value是每一个对象
                var trs = '<tr><td>' + value.id + '</td><td>' + value.pname + '</td><td>' + value.price + '</td></tr>'; //数组中有多少对象就生成多少tr
                tbody.insertAdjacentHTML('beforeend', trs); //把trs追加到tbody中
            });
        }
        // 2.点搜索按钮渲染页面符合价格的产品
        // 思路，按钮点击事件，获取两个input的value,用数组中的filter()方法筛选符合的新数组，再把新数组渲染到页面中去
        // 获取元素
        var search_price = document.querySelector('.search-price');
        var start = document.querySelector('.start');
        var end = document.querySelector('.end');
        // 按钮点击执行
        search_price.addEventListener('click', function() {
            // if (start.value instanceof Number && end.value instanceof Number)
            // 用filter()获取新数组
            var newData = data.filter(function(value, index, array) {
                // 返回大于等于最低价格并且小于等于最高价格的对象
                return value.price >= start.value && value.price <= end.value;
            }); //newData是新的是数组
            // 在渲染之前先清空tbody中的元素，不然会造成元素二次追加
            load(newData); // 把新的数组渲染到页面
        });
        // 当两边输入框都有数字时才执行点击事件

        // 3.点击查询按钮获取pname一致的数组，然后渲染页面,这部分与上面差不多，给上边封装函数使用
        // 获取元素
        var search_pro = document.querySelector('.search-pro');
        var product = document.querySelector('.product');
        // 查找唯一元素
        search_pro.addEventListener('click', function() {
            var arr = [];
            data.forEach(function(value, index, array) {
                if (value.pname == product.value) {
                    arr.push(value);
                    return false;
                }
            });
            load(arr);
        });
    </script>
</body>

</html>